package elm.dao;

import elm.entity.po.Business;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;

import java.util.List;

/**
 * 商家数据访问接口
 * 提供基础CRUD操作及自定义查询方法：
 * - 支持通过ID精准查询商家信息
 * - 支持关联查询商家及其食品信息
 */
public interface BusinessDao extends CrudRepository<Business, Long> {

    /**
     * 查询商家详细信息（包含关联的食品数据）
     * 使用LEFT JOIN FETCH实现关联实体的一次性加载，避免N+1查询问题
     *
     * @param id 商家唯一标识符
     * @return 返回包含完整关联食品信息的商家对象
     * JPQL说明：SELECT b FROM Business b LEFT JOIN FETCH b.foods WHERE b.id = ?1
     */
    @Query("SELECT b FROM Business b LEFT JOIN FETCH b.foods WHERE b.id = :id")
    Business findByIdWithFoods(@Param("id") Long id);
    /**
     * 根据商家类型查询商家列表
     *
     * @param type 商家类型
     * @return 返回指定类型的商家列表
     */
    @Query("SELECT b FROM Business b WHERE b.type = :type")
    Iterable<Business> findByType(@Param("type") String type);
    /**
     * 模糊匹配商家名称或描述信息
     *
     * @param keyword 搜索关键词
     * @return 返回匹配的商家列表
     */
    @Query("SELECT b FROM Business b WHERE b.name LIKE %:keyword% OR b.description LIKE %:keyword%")
    List<Business> findByNameOrDescriptionContaining(@Param("keyword") String keyword);

}
